4.2 开发视角

容器即应用!

在本节中,会分析一份应用代码中的Dockerfile并将其容器化,最终以容器的方式运行。相关代码可从本书配套资源或我的Github主页中获取。

本节接下来的内容会基于 Linux 示例进行演示。但其实两个示例中都容器化了相同的Web 应用代码,所以步骤也是一样的。

进入到仓库文件目录之下,查看其内容。

$ cd psweb
$ ls -l
total 28
-rw-rw-r-- 1 ubuntu ubuntu  341 Sep 29 12:15 app.js
-rw-rw-r-- 1 ubuntu ubuntu  216 Sep 29 12:15 circle.yml
-rw-rw-r-- 1 ubuntu ubuntu  338 Sep 29 12:15 Dockerfile
-rw-rw-r-- 1 ubuntu ubuntu  421 Sep 29 12:15 package.json
-rw-rw-r-- 1 ubuntu ubuntu  370 Sep 29 12:15 README.md
drwxrwxr-x 2 ubuntu ubuntu 4096 Sep 29 12:15 test
drwxrwxr-x 2 ubuntu ubuntu 4096 Sep 29 12:15 views

对于Windows示例,读者需要 cddotnet-docker-samples\aspnetapp 目录当中。

Linux的示例是一个简单的Node.js Web应用。Windows示例是一个简单的ASP.NET Web应用。

每个仓库中都包含一个名为 Dockerfile 的文件。Dockerfile是一个纯文本文件,其中描述了如何将应用构建到Docker镜像当中。

查看Dockerfile的全部内容。

$ cat Dockerfile
FROM alpine
LABEL maintainer="nigelpoulton@hotmail.com"
RUN apk add --update nodejs nodejs-npm
COPY . /src
WORKDIR /src
RUN  npm install
EXPOSE  8080
ENTRYPOINT ["node", "./app.js"]

Windows示例中的Dockerfile内容会有所不同。但是,这些区别在现阶段并不重要。关于Dockerfile的更多细节本书会在接下来的章节中进行详细介绍。现在,只需要知道Dockerfile的每一行都代表一个用于构建镜像的指令即可。

使用 docker image build 命令,根据Dockerfile中的指令来创建新的镜像。示例中新建的Docker镜像名为 test:latest

一定要在包含应用代码和Dockerfile的目录下执行这些命令。

$ docker image build -t test:latest .
Sending build context to Docker daemon 74.75kB
Step 1/8 : FROM alpine
latest: Pulling from library/alpine
88286f41530e: Pull complete
Digest: sha256:f006ecbb824...0c103f4820a417d
Status: Downloaded newer image for alpine:latest
 ---> 76da55c8019d
<Snip>
Successfully built f154cb3ddbd4
Successfully tagged test:latest

注:

Windows示例构建可能花费比较长的时间。构建时间长短是由构建过程中要拉取的镜像大小和复杂度决定的。

一旦构建完成,就可以确认主机上是否存在 test:latest 镜像。

$ docker image ls
REPO     TAG        IMAGE ID         CREATED         SIZE
Test     latest     f154cb3ddbd4     1 minute ago    55.6MB
...

读者现在已经拥有一个新的Docker镜像,其中包含了应用程序。

从镜像启动容器,并测试应用。

Linux代码如下。

$ docker container run -d \
  --name web1 \
  --publish 8080:8080 \
  test:latest

打开Web浏览器,在地址栏中输入容器运行所在的Docker主机的DNS名称或者IP地址,并在后面加上端口号 8080 。然后就能看到图4.1的Web页面。

如果读者使用的是Windows示例或者Mac版Docker,则需要将地址替换为 localhost:8080 或者 127.0.0.1:8080 ;如果读者使用的是Play with Docker,需要单击终端界面上的 8080 超链接。

17.png

图4.1 Linux系统测试应用Web界面

Windows代码如下。

> docker container run -d \
  --name web1 \
  --publish 8080:80 \
  test:latest

打开Web浏览器,在地址栏中输入容器运行所在的Docker主机的DNS名称或者IP地址,并在后面加上端口号 8080 ,然后就能看到图4.2的Web页面。

18.png

图4.2 Windows系统测试应用Web界面

如果读者使用的是Windows示例或者Mac版Docker,则可参考上面的规则。

读者已经成功将应用代码构建到了Docker镜像当中,然后以容器的方式启动该镜像,这个过程叫作“应用容器化”。

results matching ""

    No results matching ""